<?php

/**
 * User class.
 * 
 * @extends AppModel
 */
class User extends AppModel {

    /**
     * Validation rules
     *
     * @var array
     */
    public $validate = array(
        'email' => array(
            'email' => array(
                'rule' => array('email'),
                'message' => 'Email không đúng định dạng.',
            ),
            'isUnique' => array(
                'rule' => array('isUnique'),
                'message' => 'Email đã được sử dụng.',
            ),
        ),
        'password' => array(
            'notempty' => array(
                'rule' => array('notempty'),
                'message' => 'Mật khẩu phải khác rỗng.',
                'allowEmpty' => false,
            ),
            'minLength' => array(
                'rule' => array('minLength', 6),
                'message' => 'Mật khẩu phải có độ dài từ 6 đến 20 ký tự.',
            ),
            'maxLength' => array(
                'rule' => array('maxLength', 20),
                'message' => 'Mật khẩu phải có độ dài từ 6 đến 20 ký tự.',
            ),
        ),
        'activate_flg' => array(
            'boolean' => array(
                'rule' => array('boolean'),
            ),
        ),
        'del_flg' => array(
            'boolean' => array(
                'rule' => array('boolean'),
            ),
        ),
        'repassword' => array(
            'notempty' => array(
                'rule' => array('notempty'),
                'message' => 'Bạn phải nhập lại mật khẩu.',
                'allowEmpty' => false,
            ),
            'match' => array(
                'rule' => 'validateRePassword',
                'message' => 'Bạn phải nhập lại đúng mật khẩu.',
            )
        ),
        'captcha' => array(
            'notempty' => array(
                'rule' => array('notempty'),
                'message' => 'Bạn phải nhập ký tự captcha.',
                'allowEmpty' => false,
            ),
            'match' => array(
                'rule' => 'validateCaptcha',
                'message' => 'Bạn phải nhập lại đúng captcha.',
            )
        )
    );

    /**
     * hasMany
     * 
     * @var array
     */
    public $hasMany = array(
        'Post' => array(
            'className' => 'Post',
            //'conditions' => array(),
            'foreignKey' => 'author',
            'fields' => array('title', 'url', 'created'),
            'order' => array('Post.created DESC'),
        //'dependent' => true
        ),
    );

    /**
     * hasOne
     * 
     * @var array
     */
    public $hasOne = array(
        'Profile' => array(
            'className' => 'Profile',
            'foreignKey' => 'id',
            'dependent' => true
        )
    );

    /**
     * beforeSave process
     * @return boolean
     */
    public function beforeSave() {
        if (isset($this->data[$this->alias]['password'])) {
            $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
        }
        return true;
    }

    /**
     * validate Password Confirm
     * @return boolean
     */
    private function validateRePassword() {
        $passwd = AuthComponent::password($this->data[$this->alias]['password']);
        $repasswd = AuthComponent::password($this->data[$this->alias]['repassword']);
        if ($passwd === $repasswd) {
            return true;
        }
        return false;
    }

    /**
     * validate Captcha
     * @return boolean
     */
    private function validateCaptcha() {
        $captchaCode = strtoupper($this->data[$this->alias]['captcha']);
        if (!empty($_SESSION[CAPTCHA_SESSION_ID]) && $captchaCode == $_SESSION[CAPTCHA_SESSION_ID]) {
            // clear to prevent re-use 
            unset($_SESSION[CAPTCHA_SESSION_ID]);
            return true;
        }
        return false;
    }

}
